from itertools import pairwise

"""
本题的难点在于处理六种特殊规则，但这六种特殊规则其实可以统一起来：

设 x=s[i−1],y=s[i]，这是两个相邻的罗马数字。
如果 x 的数值小于 y 的数值，那么 x 的数值要取相反数。例如 IV 中的 I 相当于 −1，CM 中的 C 相当于 −100。
把所有数值相加，即为答案。

"""
class Solution:
    def romanToInt(self, s: str) -> int:
        has={"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000}
        ans=0
        for x,y in pairwise(s):
            x,y=has[x],has[y]
            # 遍历到后一个y，与前一个x做对比
            ans+=x if x>=y else -x
        return ans+has[s[-1]]

